// 部署配置文件
// 包含不同环境的配置参数和构建命令配置

module.exports = {
  // 项目信息
  projectInfo: {
    name: 'StarMate',
    version: '1.0.0',
    description: '智能单词学习助手应用',
    author: 'StarMate Team',
    copyright: '© 2024 StarMate. All rights reserved.'
  },
  
  // 环境配置
  environments: {
    // 开发环境
    development: {
      baseUrl: 'https://dev-api.starmate.com',
      wsUrl: 'wss://dev-ws.starmate.com',
      env: 'development',
      debug: true,
      logLevel: 'debug',
      enableMock: true,
      timeout: 10000
    },
    
    // 测试环境
    test: {
      baseUrl: 'https://test-api.starmate.com',
      wsUrl: 'wss://test-ws.starmate.com',
      env: 'test',
      debug: true,
      logLevel: 'info',
      enableMock: false,
      timeout: 10000
    },
    
    // 预发布环境
    preproduction: {
      baseUrl: 'https://pre-api.starmate.com',
      wsUrl: 'wss://pre-ws.starmate.com',
      env: 'preproduction',
      debug: false,
      logLevel: 'warn',
      enableMock: false,
      timeout: 8000
    },
    
    // 生产环境
    production: {
      baseUrl: 'https://api.starmate.com',
      wsUrl: 'wss://ws.starmate.com',
      env: 'production',
      debug: false,
      logLevel: 'error',
      enableMock: false,
      timeout: 8000
    }
  },
  
  // 构建配置
  build: {
    // 公共构建参数
    common: {
      // 是否压缩代码
      minify: true,
      // 是否混淆代码
      uglify: true,
      // 是否压缩图片资源
      compressImage: true,
      // 是否启用sourceMap
      sourceMap: false,
      // 是否启用分包优化
      subpackages: true,
      // 是否启用组件按需加载
     按需加载组件: true,
      // 自定义webpack配置
      webpackConfig: {
        resolve: {
          alias: {
            '@': '/src'
          }
        }
      }
    },
    
    // 各平台特定配置
    platforms: {
      h5: {
        // 是否启用CDN
        useCDN: true,
        // CDN基础路径
        cdnBase: 'https://cdn.starmate.com/static/',
        // 构建优化配置
        optimization: {
          splitChunks: true,
          runtimeChunk: true,
          cacheGroups: {
            vendors: {
              test: /[\\/]node_modules[\\/]/,
              priority: -10
            },
            common: {
              minChunks: 2,
              priority: -20,
              reuseExistingChunk: true
            }
          }
        }
      },
      
      appplus: {
        // 是否启用原生插件
        useNativePlugins: true,
        // 是否启用离线打包
        offlinePackage: true,
        // 权限配置
        permissions: [
          'location',
          'camera',
          'album',
          'record'
        ]
      },
      
      mp: {
        // 是否启用云开发
        useCloud: false,
        // 小程序配置
        mpConfig: {
          // 页面最多可配置数量
          pageCountLimit: 100,
          // 是否启用分包加载
          subPackages: true,
          // 分包加载配置
          subpackageOptions: {
            root: 'pages',
            pages: []
          }
        }
      }
    }
  },
  
  // 发布配置
  publish: {
    // 版本控制
    version: {
      // 版本号格式: 主版本.次版本.修订号
      current: '1.0.0',
      // 版本命名规则
      namingConvention: '${version}-${env}-${date}',
      // 版本发布说明文件
      changelogFile: './CHANGELOG.md'
    },
    
    // 部署目标
    targets: {
      h5: {
        // 部署类型: server(服务器), oss(对象存储), cos(腾讯云COS), etc.
        type: 'oss',
        // 部署路径
        path: '/starmate/h5/${version}/',
        // 资源预热
        preheat: true,
        // 是否启用CDN刷新
        cdnRefresh: true
      },
      
      appplus: {
        // 安卓配置
        android: {
          // 应用包名
          packageName: 'com.starmate.app',
          // 应用签名文件
          keystore: {
            path: './cert/starmate-release.keystore',
            alias: 'starmate',
            // 密码应通过环境变量传入，此处为示例
            password: '${ANDROID_KEYSTORE_PASSWORD}'
          },
          // 应用市场配置
          markets: [
            {
              name: '华为应用市场',
              enabled: true,
              autoPublish: false
            },
            {
              name: '小米应用商店',
              enabled: true,
              autoPublish: false
            },
            {
              name: 'OPPO应用商店',
              enabled: true,
              autoPublish: false
            },
            {
              name: 'vivo应用商店',
              enabled: true,
              autoPublish: false
            }
          ]
        },
        
        // iOS配置
        ios: {
          // 应用ID
          bundleId: 'com.starmate.app',
          // 证书配置
          certificate: {
            type: 'production', // development, distribution
            provisioningProfile: './cert/StarMate_Profile.mobileprovision',
            certificateFile: './cert/StarMate_Certificate.p12',
            // 密码应通过环境变量传入，此处为示例
            password: '${IOS_CERTIFICATE_PASSWORD}'
          },
          // App Store配置
          appStore: {
            enabled: true,
            autoPublish: false,
            appStoreConnect: {
              username: '${APPLE_ID}',
              appId: '1234567890'
            }
          }
        }
      },
      
      mp: {
        weixin: {
          appId: 'wx1234567890abcdef',
          autoPublish: false,
          publishType: 'preview' // preview, submit
        },
        
alipay: {
          appId: '2021000000000000',
          autoPublish: false,
          publishType: 'preview'
        }
      }
    },
    
    // 部署流程配置
    pipeline: {
      // 构建前执行的命令
      preBuild: [
        'npm run lint',
        'npm run test:unit'
      ],
      // 构建命令
      build: 'npm run build:${env}',
      // 构建后执行的命令
      postBuild: [
        'npm run test:e2e',
        'npm run upload:${platform}'
      ],
      // 部署命令
      deploy: 'npm run deploy:${target}'
    }
  },
  
  // 监控配置
  monitoring: {
    // 错误监控
    error: {
      enabled: true,
      // 上报频率（毫秒）
      reportInterval: 30000,
      // 是否上报控制台错误
      reportConsoleErrors: true,
      // 错误聚合配置
      aggregation: {
        enabled: true,
        // 聚合算法: stackTrace, message, url
        method: 'stackTrace'
      }
    },
    
    // 性能监控
    performance: {
      enabled: true,
      // 监控指标
      metrics: [
        'first-paint',
        'first-contentful-paint',
        'time-to-interactive',
        'dom-complete',
        'resource-load'
      ],
      // 性能阈值告警
      alerts: {
        fcp: 2000, // 首次内容绘制超过2秒告警
        tti: 5000, // 可交互时间超过5秒告警
        load: 8000 // 页面加载时间超过8秒告警
      }
    },
    
    // 用户行为监控
    userBehavior: {
      enabled: true,
      // 记录的事件类型
      events: [
        'page-view',
        'click',
        'input',
        'error',
        'custom'
      ],
      // 采样率（0-1）
      sampleRate: 0.1,
      // 是否记录用户ID
      trackUserId: true,
      // 是否记录会话信息
      trackSession: true
    }
  },
  
  // 备份和回滚配置
  backup: {
    // 是否启用自动备份
    enabled: true,
    // 备份频率（天）
    frequency: 1,
    // 备份保留数量
    keepCount: 10,
    // 备份路径
    path: './backups/',
    // 备份内容
    include: [
      './dist',
      './config',
      './src/assets'
    ],
    // 忽略的内容
    exclude: [
      'node_modules',
      '*.log',
      '*.tmp'
    ]
  }
};

// 根据环境获取配置的辅助函数
function getConfig(env = 'development') {
  const config = module.exports;
  const envConfig = config.environments[env] || config.environments.development;
  
  return {
    ...config.projectInfo,
    ...envConfig,
    build: {
      ...config.build.common,
      ...(config.build.platforms[process.env.PLATFORM] || {})
    }
  };
}

module.exports.getConfig = getConfig;

// 导出默认配置
exports.default = module.exports;